协议保存在类结构的协议表中,我们可以使用runtime的相关api查看指定类遵循的协议,或动态修改遵循的协议等。
语法总结:
- 协议中可以声明方法、属性
- 协议方法分为可选可必选
- 协议属性不会自动合成(与@dynamic的property一样)
- 协议可继承(通过xcode创建的protocol文件,默认继承了NSObject协议),且为单继承,子协议默认继承了父协议的所有内容
使用建议:
- 当主类遵循多个协议时,可以使用category将主类分开,防止代码量过大且过于复杂
- 协议可以让使用类匿名(即对外返回id
的对象),公开的api放到protocol中,一般用于设计framework等。可以参见NSFetchResultController类的设计。